package com.wzy.netty.core.codec2;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

/**
 * 描述
 * 自定义一个handler 需要继承netty规定好的某个HandlerAdapter
 * 创建人    Wzy
 * 创建时间: 2020-05-21  14:39
 */
public class NettyServerHandler extends SimpleChannelInboundHandler<MyDataInfo.MyMessage> {


    /*
     * 1.ChannelHandlerContext ctx :上下文对象,含有管道pipeline,通道channel,地址
     * 2object msg: 就是客户端发送的数据,默认是object格式
     * */

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, MyDataInfo.MyMessage msg) throws Exception {
        //根据dataType现实不同的信息
        MyDataInfo.MyMessage.DateType dataType = msg.getDataType();
        if (dataType == MyDataInfo.MyMessage.DateType.StudentType) {
            MyDataInfo.Student student = msg.getStudent();
            System.out.println("学生id:" + student.getId() + "学生姓名:" + student.getName());
        } else if (dataType == MyDataInfo.MyMessage.DateType.WorkerType) {
            MyDataInfo.Worker worker = msg.getWorker();
            System.out.println("工人年龄:" + worker.getAge() + "工人姓名:" + worker.getName());
        } else {
            System.out.println("传输的类型不正确");
        }
    }

    //读取数据完毕
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        //数据写入到缓存,并刷新
        //一般将,我们对这个发送的数据进行编码
        ctx.writeAndFlush(Unpooled.copiedBuffer("hello,客户端(*^▽^*)", CharsetUtil.UTF_8));
    }

    //异常处理
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
    }
}
